# vim:set et sts=4 sw=4:
#
# ibus-tmpl - The Input Bus template project
#
# Copyright (c) 2009 Yu Fan <yufanyufan@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

import ibus
import os
import traceback
from gettext import dgettext

import npcore
import npengine
import ZhengJuDB
import JianPin
import QuanPin
import ShuangPin


_  = lambda a : dgettext("ibus-natural-pinyin", a)
N_ = lambda a : a


class EngineFactory(ibus.EngineFactoryBase):
	FACTORY_PATH = "/com/redhat/IBus/engines/NaturalPinyin/Factory"
	ENGINE_PATH = "/com/redhat/IBus/engines/NaturalPinyin/Engine"
	NAME = _("Natural Pinyin")
	LANG = "zh_CN"
	#ICON = os.getenv("IBUS_NATRAUAL_PINYIN_LOCATION") + "/icons/ibus-pinyin.svg"
	AUTHORS = "Yu Fan <yufanyufan@gmail.com>"
	CREDITS = "GPLv2"

	def __init__(self, bus):
		super(EngineFactory, self).__init__(bus)
		self.__id = 0
		config = bus.get_config()
		config.connect("reloaded", self.__config_reloaded_cb)
		config.connect("value-changed", self.__config_value_changed_cb)
		self.__config_reloaded_cb(config)
		self.__bus = bus

	def create_engine(self, engine_name):
		self.__id += 1
		print engine_name
		try:
			if engine_name == "natural-pinyin-jianpin":
				return JianPin.JianPinEngine (self.__bus, "%s/%d" % (self.ENGINE_PATH, self.__id))
			elif engine_name == "natural-pinyin-quanpin":
				return QuanPin.QuanPinEngine (self.__bus, "%s/%d" % (self.ENGINE_PATH, self.__id))
			elif engine_name == "natural-pinyin-shuangpin":
				return ShuangPin.ShuangPinEngine (self.__bus, "%s/%d" % (self.ENGINE_PATH, self.__id))
			return JianPin.JianPinEngine (self.__bus, "%s/%d" % (self.ENGINE_PATH, self.__id))
		except Exception, e:
			print e
			traceback.print_exc()
			return JianPin.JianPinEngine (self.__bus, "%s/%d" % (self.ENGINE_PATH, self.__id))

	def __config_reloaded_cb(self, config):
		npcore.Editor.CONFIG_RELOADED(config)
		ZhengJuDB.ZhengJuDB.CONFIG_RELOADED(config)
		npengine.Engine.CONFIG_RELOADED(config)
		ShuangPin.ShuangPinEngine.CONFIG_RELOADED(config)

	def __config_value_changed_cb(self, config, section, name, value):
		self.__config_reloaded_cb(config)

